package main

import (
	"fmt"
	"log"

	"ix-brow/config"
	"ix-brow/controllers"
	"ix-brow/middlewares"
	"ix-brow/models"
	"ix-brow/services"

	"github.com/gin-gonic/gin"
)

func main() {
	// 初始化配置
	if err := config.Init(); err != nil {
		log.Fatalf("配置初始化失败: %v", err)
	}

	// 初始化数据库
	if err := models.InitDB(); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}

	// 初始化并启动过期用户检查服务
	expiredUserService := services.NewExpiredUserService()
	// 立即执行一次检查
	go expiredUserService.ProcessExpiredUsers()
	// 启动定时检查
	expiredUserService.StartScheduledCheck()
	log.Println("过期用户检查服务已启动")

	// 设置Gin为发布模式
	gin.SetMode(gin.ReleaseMode)

	// 创建Gin路由
	r := gin.Default()

	// 添加中间件
	r.Use(middlewares.Cors())

	// 静态文件服务
	r.Static("/static", "./static")

	// === 新增：外部 API 路由 ===
	// 注意：此路由目前未受保护，后续应考虑添加API密钥或其他认证方式
	externalAPI := r.Group("/api/external")
	{
		externalAPI.POST("/user-browsers", controllers.GetUserBrowsersExternal)
	}

	// 管理页面路由
	admin := r.Group("/admin")
	{
		// 页面路由
		admin.GET("/", controllers.AdminPage)
		admin.GET("/proxy", controllers.ProxyPage)

		// 用户管理API路由
		admin.GET("/api/users/composites", controllers.GetUserBrowserComposites)
		admin.GET("/api/users", controllers.GetUserList)
		admin.GET("/api/users/:id", controllers.GetUserDetail)
		admin.DELETE("/api/users/:id", controllers.DeleteUser)
		admin.PUT("/api/users/:id/disable", controllers.DisableUser)
		admin.PUT("/api/users/:id/enable", controllers.EnableUser)
		admin.PUT("/api/browsers/:id/expiration", controllers.UpdateBrowserExpiration)
		admin.PUT("/api/browsers/:id/status", controllers.ToggleBrowserStatus)
		admin.POST("/api/check-expired-users", controllers.TriggerExpiredUserCheck)

		// 代理管理API路由
		admin.GET("/api/proxies", controllers.GetProxyList)
		admin.GET("/api/proxies/:id", controllers.GetProxyDetail)
		admin.POST("/api/proxies", controllers.CreateProxy)
		admin.PUT("/api/proxies", controllers.UpdateProxy)
		admin.DELETE("/api/proxies/:id", controllers.DeleteProxy)
		admin.POST("/api/proxies/sync", controllers.SyncProxies)
		admin.POST("/api/proxies/apply-to-users", controllers.ApplyProxyToUsers)
		admin.GET("/api/proxies/application-history", controllers.GetProxyApplicationHistory)

		// 新增：获取可应用代理的浏览器列表
		admin.GET("/api/browsers/for-proxy", controllers.GetAllBrowsersForProxy)
		// 新增：将代理应用到指定浏览器
		admin.POST("/api/proxies/apply-to-browsers", controllers.ApplyProxyToBrowsers)

		// 激活API路由
		admin.POST("/api/activate-browser", controllers.ActivateBrowser)
	}

	// 启动服务器
	port := config.AppConfig.Server.Port
	log.Printf("服务器启动在 :%s 端口...", port)
	if err := r.Run(fmt.Sprintf(":%s", port)); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}
